package com.ktgj.hotel.domain.enums;


import com.ktgj.hotel.exception.FriendlyException;

/**
 * @Author: likeli
 * @Description: 渠道通用枚举类型
 * @Data: Create in 2018/5/17 上午10:01
 * @Modificd_By:
 */
public class HotelChannelEnumDto {

    /**
     * 付款类型
     */
    public enum PaymentType {

        /**
         * 前台现付
         */
        SelfPay(1L),

        /**
         * 预付
         */
        Prepay(3L);

        private Long value;

        PaymentType(Long value) {
            this.value = value;
        }

        public Long getValue() {
            return value;
        }

        public void setValue(Long value) {
            this.value = value;
        }
    }

    /**
     * 产品业务类型
     */
    public enum EnumBizType {

        /**
         * 普通
         */
        Common,

        /**
         * 夜销
         */
        NightSell,

        /**
         * 钟点房
         */
        HoursRoom,

        /**
         * 限时抢购
         */
        FlashSale,

        /**
         * 手机专享
         */
        MobileExclusive,

        /**
         * 铂涛产品
         */
        TaoProducts,

        /**
         * 床位房
         */
        BedRoom;

        public enum ElongEnumBizType {
            /**
             * 限时抢购
             */
            FlashSale(3),
            /**
             * 钟点房
             */
            HoursRoom(4),

            /**
             * 手机专享
             */
            MobileExclusive(5),

            /**
             * 铂涛产品，下单需提供入住人身份证
             */
            TaoProducts(6),
            /**
             * 未知，艺龙内部使用，一般代理可忽略
             */
            UnKnown(99);

            private int index;

            ElongEnumBizType(int index) {
                this.index = index;
            }

            public int getIndex() {
                return index;
            }

            @Override
            public String toString() {
                return super.name();
            }
        }

        /**
         * 艺龙产品业务类型
         *
         * @return 产品业务类型
         */
        public static EnumBizType map(ElongEnumBizType elongEnumBizType) throws FriendlyException {
            int index = elongEnumBizType.getIndex();
            switch (index) {
                case 3:
                    return FlashSale;
                case 4:
                    return HoursRoom;
                case 5:
                    return MobileExclusive;
                case 6:
                    return TaoProducts;
                default:
                    throw new FriendlyException("未知艺龙产品业务类型映射");
            }
        }
    }

    /**
     * 货币类型
     */
    public enum CurrencyCodeType {
        /**
         * 人民币
         */
        RMB,
        /**
         * 港币
         */
        HKD,
        /**
         * 澳门币
         */
        MOP,
        /**
         * 美币
         */
        USD,
        /**
         * 新加坡币
         */
        SGD;
    }

    /**
     * 客人类型
     */
    public enum CustomerType {
        /**
         * 统一价
         */
        All,
        /**
         * 内宾
         */
        DOMESTIC,
        /**
         * 外宾
         */
        FOREIGNER,
        /**
         * 港澳台
         */
        HongKong,
        /**
         * 中宾价
         */
        ChinaGuest;

        public enum QunerCustomerType {
            /**
             * 内宾
             */
            DOMESTIC,
            /**
             * 外宾
             */
            FOREIGNER;
        }

        public enum ElongCustomerType {
            /**
             * 统一价
             */
            All,
            /**
             * 内宾价，需提示客人“须持大陆身份证入住”
             */
            Chinese,
            /**
             * 外宾价，需提示客人“须持国外护照入住”；
             */
            OtherForeign,
            /**
             * 港澳台客人价，需提示客人“须持港澳台身份证入住”；
             */
            HongKong,
            /**
             * 中宾价，需提示客人“须持中国身份证、护照入住”；
             */
            ChinaGuest;
        }

        /**
         * 去哪儿顾客类型映射标准顾客类型
         *
         * @param type
         * @return
         * @throws FriendlyException
         */
        public static CustomerType map(QunerCustomerType type) throws FriendlyException {
            switch (type) {
                case DOMESTIC:
                    return DOMESTIC;
                case FOREIGNER:
                    return FOREIGNER;
                default:
                    throw new FriendlyException("未知去哪儿客人类型");
            }
        }


        /**
         * 美团顾客类型映射标准顾客类型
         * <p>
         * 外宾政策，0-无，1-酒店接待大陆、港澳台及外国客人，2-酒店仅接待大陆客人，3-酒店仅接待大陆和港澳台客人。
         *
         * @param type
         * @return
         * @throws FriendlyException
         */
        public static CustomerType map(int type) throws FriendlyException {
            switch (type) {
                case 0:
                case 1:
                    return All;
                case 2:
                    return ChinaGuest;
                case 3:
                    return DOMESTIC;
                default:
                    throw new FriendlyException("未知美团客人类型");
            }
        }

        /**
         * 艺龙顾客类型映射标准顾客类型
         *
         * @param type
         * @return
         * @throws FriendlyException
         */
        public static CustomerType map(ElongCustomerType type) throws FriendlyException {
            switch (type) {
                case All:
                    return All;
                case Chinese:
                    return DOMESTIC;
                case OtherForeign:
                    return FOREIGNER;
                case HongKong:
                    return HongKong;
                case ChinaGuest:
                    return ChinaGuest;
                default:
                    throw new FriendlyException("未知艺龙客人类型");
            }
        }
    }

    /**
     * 渠道类型
     */
    public enum SupplierType {
        /**
         * 金色世纪 = 1
         */
        JSSJ(1),

        /**
         * 汇通 =2
         */
        HUITONG(2),

        TRAVELAGENCY(4),
        /**
         * 艺龙 = 5
         */
        ELONG(5),

        /**
         * 畅联 = 6
         */
        CHINAONLINE(6),

        /**
         * 去哪儿 = 8
         */
        QUNAR(8),

        /**
         * 捷旅 = 9
         */
        JLTOUR(9),

        /**
         * 天下房仓 = 10
         */
        FANGCANG(10),

        HOTELCARD(11),

        JSJPREPAY(13),
        /**
         * 北京悦途 = 19
         */
        YUETU(19),

        SUPER8(20),


        /**
         * 携程 = 22
         */
        @Deprecated
        CTRIP(22),

        /**
         * 龙腾捷旅 = 22
         */
        LONGTENG(24),

        /**
         * 新携程 = 25
         */
        CTRIPNew(25),

        /**
         * 东呈 = 28
         */
        DOSSEN(28),

        /**
         * 亚朵 = 29
         */
        YADUO(29),

        /**
         * 住哪 = 30
         */
        ZHUNA(30),

        /**
         * 美团 = 35
         */

        MEITUAN(35);

        private Integer id;

        public Integer getId() {
            return id;
        }

        SupplierType(Integer id) {
            this.id = id;
        }

        public static SupplierType getEnumByType(int id) {
            for (SupplierType bt : values()) {
                if (bt.id == id) {
                    return bt;
                }
            }
            return null;
        }
    }

    /**
     * 订单状态
     */
    public enum OrderStatusType {
        /**
         * 等待支付/等待担保
         */
        WAIT_PAY,

        /**
         * 等待确认
         */
        WAIT_CONFIRM,

        /**
         * 等待安排房间
         */
        WAIT_ARRANGE_ROOM,

        /**
         * 等待入住
         */
        WAIT_SHOW,

        /**
         * 已入住
         */
        CHECKED_IN,

        /**
         * 已离店
         */
        CHECKED_OUT,

        /**
         * 预定取消
         */
        RESERVE_CANCELED,

        /**
         * 预定失败
         */
        RESERVE_FAILED,

        /**
         * 未入住
         */
        NO_SHOW;
    }
}
